[Flags]
public enum SCM_ACCESS : uint
{
STANDARD_RIGHTS_REQUIRED = 0xF0000,
SC_MANAGER_CONNECT = 0x1,
SC_MANAGER_CREATE_SERVICE = 0x2,
SC_MANAGER_ENUMERATE_SERVICE = 0x4,
SC_MANAGER_LOCK = 0x8,
SC_MANAGER_QUERY_LOCK_STATUS = 0x10,
SC_MANAGER_MODIFY_BOOT_CONFIG = 0x20,
SC_MANAGER_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED |
SC_MANAGER_CONNECT |
SC_MANAGER_CREATE_SERVICE |
SC_MANAGER_ENUMERATE_SERVICE |
SC_MANAGER_LOCK |
SC_MANAGER_QUERY_LOCK_STATUS |
SC_MANAGER_MODIFY_BOOT_CONFIG
}
[DllImport("advapi32.dll", SetLastError=true)]
static extern IntPtr OpenSCManager( string machineName, string databaseName, SCM_ACCESS dwAccess );
<DllImport("advapi32.dll", CharSet:=CharSet.Auto, SetLastError:=True)> _
Private Shared Function OpenSCManager(ByVal machineName As String, ByVal databaseName As String, ByVal desiredAccess As Int32) As IntPtr
End Function
None.
Pass in Null/Nothing for MachineName to use the local machine.
Pass in Null/nothing as the database name to use the default SERVICES_ACTIVE_DATABASE
VB:
Const STANDARD_RIGHTS_REQUIRED As Int32 = &HF0000
Const SC_MANAGER_CONNECT As Int32 = &H1
Const SC_MANAGER_CREATE_SERVICE As Int32 = &H2
Const SC_MANAGER_ENUMERATE_SERVICE As Int32 = &H4
Const SC_MANAGER_LOCK As Int32 = &H8
Const SC_MANAGER_QUERY_LOCK_STATUS As Int32 = &H10
Const SC_MANAGER_MODIFY_BOOT_CONFIG As Int32 = &H20
Const SC_MANAGER_ALL_ACCESS As Int32 = STANDARD_RIGHTS_REQUIRED Or _
SC_MANAGER_CONNECT Or _
SC_MANAGER_CREATE_SERVICE Or _
SC_MANAGER_ENUMERATE_SERVICE Or _
SC_MANAGER_LOCK Or _
SC_MANAGER_QUERY_LOCK_STATUS Or _
SC_MANAGER_MODIFY_BOOT_CONFIG
Dim scHandle As IntPtr = OpenSCManager(Nothing, Nothing, SC_MANAGER_ALL_ACCESS )
MsgBox(scHandle.ToString)
CloseServiceHandle(scHandle)
C#:
IntPtr handle = OpenSCManager( null, null, SCM_ACCESS.SC_MANAGER_ALL_ACCESS );
if ( handle != IntPtr.Zero )
{
CloseServiceHandle( handle );
}
Do you know one? Please contribute it!